Was ist backus naur form?

Die Backus-Naur-Form (BNF) ist eine formale Notation zur Definition der Syntax von formalen Sprachen, wie z.B. Programmiersprachen oder Datenformate. Sie wird verwendet, um die grammatikalischen Regeln einer Sprache präzise und eindeutig zu beschreiben.

Grundlegende Elemente der BNF:

  • Nichtterminale: Symbole, die durch andere Symbole (terminale oder nichtterminale) ersetzt werden können. Sie repräsentieren syntaktische Kategorien oder Konzepte (z.B. Satz, Ausdruck, Variable). Nichtterminale werden oft in spitzen Klammern < > eingeschlossen, z.B. <Ausdruck>.

  • Terminale: Symbole, die die eigentlichen Zeichen der Sprache darstellen und nicht weiter ersetzt werden können (z.B. Schlüsselwörter, Operatoren, Literale). Sie erscheinen so, wie sie in der Sprache vorkommen (z.B. if, +, 123).

  • Produktionsregeln: Regeln, die definieren, wie ein Nichtterminal durch eine Sequenz von Terminalen und/oder Nichtterminalen ersetzt werden kann. Eine Produktionsregel hat die Form Nichtterminal ::= Sequenz von Symbolen. Das Symbol ::= bedeutet "ist definiert als".

  • Alternative: Der Operator | (oder) ermöglicht es, mehrere alternative Definitionen für ein Nichtterminal anzugeben. Beispiel: <Zahl> ::= <Ziffer> | <Zahl> <Ziffer> bedeutet, dass eine Zahl entweder eine einzelne Ziffer oder eine Zahl gefolgt von einer Ziffer sein kann.

  • Wiederholung (Kleene-Stern): Obwohl die BNF selbst keine direkte Notation für die Wiederholung hat, kann diese durch rekursive Definitionen erreicht werden. Erweiterte BNF (EBNF) und deren Varianten (z.B. ABNF) bieten explizite Operatoren für Wiederholung (z.B. *, +, ?).

Beispiel:

Hier ist ein einfaches Beispiel einer BNF-Grammatik für einen arithmetischen Ausdruck:

<Ausdruck> ::= <Term> | <Ausdruck> + <Term> | <Ausdruck> - <Term>
<Term>     ::= <Faktor> | <Term> * <Faktor> | <Term> / <Faktor>
<Faktor>   ::= <Zahl> | ( <Ausdruck> )
<Zahl>     ::= <Ziffer> | <Zahl> <Ziffer>
<Ziffer>   ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

EBNF (Erweiterte Backus-Naur-Form):

EBNF ist eine Erweiterung der BNF, die zusätzliche Notationen bietet, um die Grammatik kompakter und lesbarer zu gestalten. Sie beinhaltet typischerweise Operatoren für:

  • Optionale Elemente: [ ... ] (das Element innerhalb der Klammern kann optional vorkommen).
  • Wiederholung (0 oder mehr): { ... } (das Element innerhalb der Klammern kann null oder mehr Mal vorkommen).
  • Wiederholung (1 oder mehr): (...)+ (das Element innerhalb der Klammern kann ein oder mehr Mal vorkommen).

Anwendungen:

Die BNF und ihre Varianten werden in vielen Bereichen eingesetzt, darunter:

  • Compilerbau: Zur Definition der Syntax von Programmiersprachen für Compiler und Interpreter.
  • Datenformatdefinition: Zur Beschreibung der Struktur von Datenformaten wie XML, JSON oder Protokollen.
  • Dokumentation: Zur präzisen Dokumentation der Syntax von Sprachen und Formaten.
  • Syntaxanalyse (Parsing): Als Grundlage für Parser, die Code oder Daten in eine interne Repräsentation umwandeln.

Wichtige verwandte Konzepte: